#ifndef MA_UTF8_H
#define MA_UTF8_H

#include <stdint.h>
#include <stdlib.h>
#include <string.h>

// 解码规则：
// 1 字节：0xxxxxxx
// 2 字节：110xxxxx 10xxxxxx
// 3 字节：1110xxxx 10xxxxxx 10xxxxxx
// 4 字节：11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

// 获取UTF-8字符的字节长度
int UTF8GetCharLen(const uint8_t byte);

// 检查一个字节是否是 UTF-8 字符的开始字节
int UTF8IsStartByte(const uint8_t byte);

// 查找指定位置前一个字符的起始位置
size_t UTF8FindPreviousCharStartPos(const uint8_t *str, size_t position);

uint8_t UTF8GetCharShowWidth(const uint8_t byte);

uint32_t UTF8GetStrShowWidth(const uint8_t *str);

size_t UTF8FindEndPosForContainerWidth(const uint8_t *str, size_t startPos, uint32_t containerWidth);

uint32_t UTF8GetShowLengthByStartAndEndPos(const uint8_t *str, size_t startPos, size_t endPos);

void UTF8Encode(uint32_t codepoint, uint8_t *str); // str需要保证5个字节

uint32_t UTF8Decode(const char *str);

#endif
